import re
import argparse
import sys
from urllib.parse import unquote
import os

def extract_links_from_md(file_path):
    """从包含HTML标签的Markdown文件中提取表格链接"""
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()
        
        # 改进的表格识别正则表达式，支持包含HTML标签的表格
        table_pattern = re.compile(
            r'^\|.*?^\|.*?^\|.*?', 
            re.MULTILINE | re.DOTALL | re.IGNORECASE
        )
        tables = table_pattern.findall(content)
        
        if not tables:
            print("未找到Markdown表格")
            return []
        
        # 提取表格中的链接
        links = []
        for table in tables:
            # 处理包含HTML标签的复杂行
            rows = table.split('\n')
            for row in rows:
                # 跳过表头行和分隔行（包含---或协议的行）
                if '---' in row or '协议' in row:
                    continue
                    
                # 提取链接（假设链接在最后一列）
                # 使用非贪婪匹配跳过HTML标签
                link_match = re.search(r'\|(.*?)(trojan://[^\|]*)', row)
                if link_match:
                    link = link_match.group(2).strip()
                    # 清理链接前后的竖线和空格
                    if link.startswith('|'):
                        link = link[1:].strip()
                    if link.endswith('|'):
                        link = link[:-1].strip()
                    links.append(link)
        
        return links
    except Exception as e:
        print(f"提取链接时发生错误: {str(e)}")
        return []

def print_links(links, format_option):
    """格式化输出链接"""
    if not links:
        print("未找到有效链接")
        return
    
    if format_option == 'raw':
        for i, link in enumerate(links, 1):
            # print(f"{i}. {link}")
            print(f"{link}")
    elif format_option == 'url':
        for i, link in enumerate(links, 1):
            # 去除trojan://前缀
            url_part = link.replace('trojan://', '', 1)
            # print(f"{i}. {url_part}")
            print(f"{url_part}")
    elif format_option == 'decoded':
        for i, link in enumerate(links, 1):
            # 去除前缀并解码
            url_part = link.replace('trojan://', '', 1)
            decoded_link = unquote(url_part)
            # print(f"{i}. {decoded_link}")
            print(f"{decoded_link}")

def main():
    parser = argparse.ArgumentParser(description='从Markdown文件中提取表格链接（支持HTML标签）')
    parser.add_argument('file', help='Markdown文件路径')
    parser.add_argument('-f', '--format', choices=['raw', 'url', 'decoded'], default='raw',
                        help='输出格式 (raw: 原始链接, url: 仅URL部分, decoded: 解码后的链接)')
    args = parser.parse_args()

    if not os.path.exists(args.file):
        print(f"文件不存在: {args.file}")
        sys.exit(1)

    links = extract_links_from_md(args.file)
    print_links(links, args.format)

if __name__ == "__main__":
    main()